import java.util.HashMap;
import java.util.Map;

//和为k的子数组；
//实例1；
//输入：nums[1,1,1],k=2;
//输出：2;
//实例2：
//输入：nums[1,2,3],k=3;
//输出：2;
public class Nm1 {
    public static int fun(int[] nums,int k){
        //1.进行相关变量的设置；
        int sum=0;//进行前缀数组和的表示；
        int ret=0;//进行统计结果的变量；
        Map<Integer,Integer> hash=new HashMap<>();//进行前缀和个数的记录；
        hash.put(0,1);//但【0,i-1】区间的所有元素和为k是的情况；
        //2,进行上述变量的统计，完成相关的任务；
        for(int x:nums){
            sum+=x;
            ret+= hash.getOrDefault(sum-k,0);
            hash.put(sum, hash.getOrDefault(sum,0)+1);
        }
      return ret;
    }
    public static void main(String[] args){
        int[] nums={1,2,3};
        int k=3;
        int ret=fun(nums,k);
        System.out.println("和为k的子数组的个数为  ："+ret);
    }
}
